diff --git a/astropy/table/groups.py b/astropy/table/groups.py
index 14104589cb..af2e5e522c 100644
--- a/astropy/table/groups.py
+++ b/astropy/table/groups.py
@@ -79,20 +79,9 @@ def _table_group_by(table, keys):
     if not table_index and isinstance(table_keys, Table):
         table_keys = represent_mixins_as_columns(table_keys)
 
-    # Get the argsort index `idx_sort`, accounting for particulars
-    try:
-        # take advantage of index internal sort if possible
-        if table_index is not None:
-            idx_sort = table_index.sorted_data()
-        else:
-            idx_sort = table_keys.argsort(kind="mergesort")
-        stable_sort = True
-    except TypeError:
-        # Some versions (likely 1.6 and earlier) of numpy don't support
-        # 'mergesort' for all data types.  MacOSX (Darwin) doesn't have a stable
-        # sort by default, nor does Windows, while Linux does (or appears to).
-        idx_sort = table_keys.argsort()
-        stable_sort = platform.system() not in ("Darwin", "Windows")
+    # Get the argsort index `idx_sort`, using 'mergesort' for stability
+    idx_sort = table_keys.argsort(kind="mergesort")
+    stable_sort = True
 
     # Finally do the actual sort of table_keys values
     table_keys = table_keys[idx_sort]
@@ -101,12 +90,6 @@ def _table_group_by(table, keys):
     diffs = np.concatenate(([True], table_keys[1:] != table_keys[:-1], [True]))
     indices = np.flatnonzero(diffs)
 
-    # If the sort is not stable (preserves original table order) then sort idx_sort in
-    # place within each group.
-    if not stable_sort:
-        for i0, i1 in zip(indices[:-1], indices[1:]):
-            idx_sort[i0:i1].sort()
-
     # Make a new table and set the _groups to the appropriate TableGroups object.
     # Take the subset of the original keys at the indices values (group boundaries).
     out = table.__class__(table[idx_sort])
